def input_ip(s):
    while True:
        continue_flag = 0
        # 输入后清除前后多余的空格
        user_input_str = input(s).strip()
        tmp = user_input_str
        # 以 点号(.) 分段 检查大体输入是否有误
        tmp = tmp.split('.')
        # 查看是否输入了四个部分 刚刚好被分成四段
        if len(tmp) != 4:
            print('ipv4地址格式有误, 请重新输入 ! ! !')
            continue
        for i in tmp:
            # 判断输入的四个部分是不是都是数字
            try:
                i = int(i)
            except ValueError:
                continue_flag = 1
                break
            # 判断数字范围是否正确
            if (i < 0) or (i > 255):
                continue_flag = 1
                break
        # 检查是否需要继续让用户输入
        if continue_flag:
            print('ipv4地址格式有误, 请重新输入 ! ! !')
            continue
        else:
            return user_input_str

def inputYN(s) -> bool:
    while True:
        # 输入后清除前后多余的空格
        user_input_str = input(s).strip()
        # 判断输入是否合法
        if not (user_input_str in ('y', 'Y', 'n', 'N')):
            continue
        else:
            return (user_input_str == 'y' or user_input_str == 'Y')

def input_num(s) -> int:
    while True:
        # 输入后清除前后多余的空格
        user_input_str = input(s).strip()
        # 判断输入是否合法
        try:
            user_input_int = int(user_input_str)
        except ValueError:
            print('不是一个合法的数字 ! ! ! !')
            continue
        return user_input_int

def input_port(s) -> int:
    while True:
        user_input_int = input_num(s)
        if user_input_int < 0 or user_input_int > 65535:
            print('端口范围错误 ! ! !')
            continue
        return user_input_int
